home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_31 / gmoddisp.asm < prev    next >
Assembly Source File  |  1995-01-01  |  4KB  |  231 lines

  1. kline           db      "│ xxxk/xxxk",0
  2. kline2        db    " xxxk",0
  3. repstr        db    " ~  ",0
  4.  
  5. OrigMemory      dw      0
  6. CursorType      dw      0
  7. Screen        dw    0B800h
  8. OldMode     db    0
  9. CurMode     db    0
  10.  
  11. proc            HowMuchMemory near
  12.         mov    bx,[cs:PspAddress]
  13.         mov    es,bx
  14.         mov    ax,[es:0002h]
  15.         mov    bx,zzzzzseg
  16.         sub    ax,bx
  17.         shr    ax,6
  18.         mov    [cs:OrigMemory],ax
  19.         ret
  20. endp        HowMuchMemory
  21.  
  22. proc        RestoreMode
  23.         xor    ah,ah
  24.         mov    al,[cs:OldMode]
  25.         int    10h
  26.         ret
  27. endp        RestoreMode
  28.  
  29. proc            SetMode near
  30.         xor    ah,ah
  31.         mov    al,[cs:CurMode]
  32.         int    10h
  33.         ret
  34. endp        SetMode
  35.  
  36. proc            DetermineDisplay near
  37.         mov    ax,0f00h
  38.         int    10h
  39.         mov    [cs:OldMode],al
  40.         cmp    al,7            ; Are we in monochrome mode?
  41.         jz    @@Monochrome
  42.         mov    [Word cs:Screen],0B800h
  43.         mov    [Word cs:CursorType],0607h
  44.         mov    [Byte cs:CurMode],3
  45.         ret
  46. @@Monochrome:    mov    [Word cs:Screen],0B000h
  47.         mov    [Word cs:CursorType],0B0Ch
  48.         mov    [Byte cs:CurMode],7
  49.         ret
  50. endp        DetermineDisplay
  51.  
  52. ; CX - Scan Lines
  53. proc            SetCursor near
  54.         mov    [cs:CursorType],cx
  55.         mov    ax,0100h
  56.         int    10h
  57.         ret
  58. endp        SetCursor
  59.  
  60. ; bx - X
  61. ; dx -Y
  62. ; cx:si - Loc
  63. ; ax - Len
  64. ; di - Attr
  65. proc            WriteChars near
  66.         push    ds si bx cx dx di
  67.         mov    es,[cs:Screen]
  68.         push    ax
  69.         mov    ax,160
  70.         mul    dx
  71.         add    ax,bx
  72.         add    ax,bx
  73.         mov    di,ax
  74.                 mov     ds,cx
  75.         pop    cx
  76.                 push    di
  77.         mov    ax,0
  78.         rep    stosw
  79.         pop    di
  80.         pop    ax
  81.         jmp    ActualWritePart
  82. endp            WriteChars
  83.  
  84. ; bx - X
  85. ; dx - Y
  86. ; cx:si - offset of string in DS
  87. proc            Write near
  88.         push    ds si bx cx dx
  89.         mov    es,[cs:Screen]
  90.         mov    ax,160
  91.         mul    dx
  92.         add    ax,bx
  93.         add    ax,bx
  94.         mov    di,ax
  95.         mov    ds,cx
  96.         lodsb
  97. ActualWritePart:
  98.         mov    ah,al
  99.         xor    cx,cx
  100.         xor    dx,dx
  101. @@MainLoop:    lodsb
  102.         cmp    al,0
  103.         jz    @@Done
  104.         cmp    al,'`'
  105.         jnz    @@CheckRepeat
  106.         lodsb
  107.         mov    ah,al
  108.         jmp    @@MainLoop
  109. @@CheckRepeat:    cmp    al,'~'
  110.         jnz    @@JustStore
  111.         lodsb
  112.         mov    cl,al
  113.         lodsb
  114.         rep    stosw
  115.         add    dx,cx
  116.         jmp    @@MainLoop
  117. @@JustStore:    inc    dx
  118.         stosw
  119.         jmp    @@MainLoop
  120. @@Done:     pop    dx cx bx si ds
  121.         ret
  122. endp        Write
  123.  
  124. ; ax - NumK
  125. ; dx - NumDigits
  126. ; cx:di - String
  127. proc            ConvertKToStr near
  128.         push    es
  129.         mov    es,cx
  130.         mov    cx,dx
  131.         dec    cx
  132.         add    di,cx
  133.         inc    cx
  134. @@NumLoop:    mov    bl,10
  135.         div    bl
  136.         add    ah,'0'
  137.         mov    [es:di],ah
  138.         dec    di
  139.         xor    ah,ah
  140.         loop    @@NumLoop
  141.         pop    es
  142.         ret
  143. endp        ConvertKToStr
  144.  
  145. proc            WriteMemLeft near
  146.         mov    bx,[cs:PspAddress]
  147.         mov    es,bx
  148.         mov    ax,[es:0002h]
  149.                 mov     bx,[cs:TopOfData]
  150.         sub    ax,bx
  151.         shr    ax,6
  152.         push    ax
  153.         mov    ax,[cs:OrigMemory]
  154.         mov    dx,3
  155.         mov    cx,seg kline
  156.         mov    di,offset kline+8
  157.         call    ConvertKToStr
  158.         pop    ax
  159.         mov    dx,3
  160.         mov    cx,seg kline
  161.         mov    di,offset kline+3
  162.         call    ConvertKToStr
  163.                 mov     bx,freek_Col
  164.                 mov     dx,freek_Line
  165.         mov    cx,seg kline
  166.         mov    si,offset kline
  167.         call    Write
  168.         ret
  169. endp        WriteMemLeft
  170.  
  171. proc            MakeDec near
  172.         push    di
  173.         dec    cx
  174.         add    di,cx
  175.         inc    cx
  176.         xor    ah,ah
  177. @@NumLoop:    mov    bl,10
  178.         div    bl
  179.         add    ah,'0'
  180.         mov    [es:di],ah
  181.         dec    di
  182.         xor    ah,ah
  183.         loop    @@NumLoop
  184. @@Done:     pop    di
  185.         ret
  186. endp        MakeDec
  187.  
  188. HexStuff        db      '0123456789ABCDEF'
  189. proc            MakeHex near
  190.                 push    di
  191.                 push    ax
  192.                 and     al,0F0h
  193.                 shr     al,4
  194.                 mov     bl,al
  195.                 mov     bh,0
  196.                 mov     ah,[cs:bx+HexStuff]
  197.                 mov     [es:di],ah
  198.                 inc     di
  199.                 pop     ax
  200.                 and     al,0Fh
  201.                 mov     bl,al
  202.                 mov     bh,0
  203.                 mov     ah,[cs:bx+HexStuff]
  204.                 mov     [es:di],ah
  205.                 pop     di
  206.                 ret
  207. endp            MakeHex
  208.  
  209. proc            DirectWrite1 near
  210.         push    es
  211.         mov    es,[cs:Screen]
  212. @@1:        lodsb
  213.         inc    di
  214.         stosb
  215.         loop    @@1
  216.         pop    es
  217.         ret
  218. endp        DirectWrite1
  219.  
  220. proc        DirectWrite2 near
  221.         push    es
  222.         mov    es,[cs:Screen]
  223. @@1:        inc    di
  224.         stosb
  225.         loop    @@1
  226.         pop    es
  227.         ret
  228. endp        DirectWrite2
  229.  
  230.  
  231.